/*
题目：二进制间距
给定一个正整数 n，找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1，返回 0 。

如果只有 0 将两个 1 分隔开（可能不存在 0 ），则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的
二进制表示中位置的绝对差。例如，"1001" 中的两个 1 的距离为 3 。
 */
public class BinaryGap {
    public int binaryGap(int n) {
        //优化版本
        int ans = 0;
        int last = -1;//记录上次出现1的位置
        for (int i = 1; n != 0; i++, n >>>= 1) {
            if ((n & 1) == 1) {
                if (last != -1) {  //要求last已经更新过位置，即1的出现次数不能少于2
                    ans = Math.max(ans,i - last);
                }
                last = i;
            }
        }
        return ans;
    }
}
